練習資料:
Alex老師的教學
PJCHENder筆記
原始畫面
用CSS調整版面
.panels {
(略)
    display: flex;
}
.panel {
		display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    flex: 1;//每格1等分
(略)
}
.panel > * {
    margin: 0;
    width: 100%;
    transition: transform 0.5s;
    flex: 1;
    display: flex;//這3行是讓文字置中
    justify-content: center;
    align-items: center;
    &:first-child {
        transform: translateY(-100%);
    }
    &:last-child {
        transform: translateY(100%);
    }
}
調整後畫面
加上JS
(function () {
    const panels = document.querySelectorAll('.panel'); //注意這不是陣列
    function clickHandler() {
        this.classList.toggle('open');
        // JQ : addClass / removeClass / toggleClass
        // JS : classList.add / classList.remove /classList.toggle 
    }
    panels.forEach(item => {
        item.addEventListener('click', clickHandler);
    })
})();
發現點擊後展開的寬度不夠,修改CSS
.panel.open {
    font-size: 40px;
    flex: 5; //依照需求修改
}
做第二段動畫
panels.forEach(item => {
        item.addEventListener('click', clickHandler);
        item.addEventListener('transitionend', transitionHandler); //第一段的動畫結束才觸發
    });
function transitionHandler(e) { //文字動畫
        console.log(e.propertyName);
        if (e.propertyName.indexOf('flex') !== -1) { //-1代表沒有找到
            this.classList.toggle('open-active');
        }
    }
點擊後沒有反應,需要回頭加上css
.panel.open-active > * {
    &:first-child {
        transform: translateY(0%);
    }
    &:last-child {
        transform: translateY(0%);
    }
}
完成畫面